package reglas;

import java.util.ArrayList;
import java.util.List;

import criterios.Criterio;

import acciones.Accion;

import domain.Paquete;

public abstract class Regla {

	private List<Accion> acciones = new ArrayList<Accion>();
	private List<Criterio> reglas = new ArrayList<Criterio>();

	public void aplicar(Paquete paquete) {
		for (Accion accion : this.getAcciones()) {
			accion.realizar(paquete);
		}
	}
	
	public boolean seAplica(Paquete paquete) {
		boolean result = true;
		for (Criterio criterio : this.getReglas()) {
			result = result &&criterio.aplicarCriterio(paquete);
		}
		return result;
	}

	public Regla withCriterio(Criterio criterio) {
		this.getReglas().add(criterio);
		return this;
	}

	public Regla withAccion(Accion accion) {
		this.getAcciones().add(accion);
		return this;
	}

	// getters & setters
	public List<Accion> getAcciones() {
		return acciones;
	}

	public void setAcciones(List<Accion> acciones) {
		this.acciones = acciones;
	}

	public List<Criterio> getReglas() {
		return reglas;
	}

	public void setReglas(List<Criterio> reglas) {
		this.reglas = reglas;
	}
}
